package com.pn.mapper;

import com.github.pagehelper.Page;
import com.pn.dto.RolePageList;
import com.pn.entity.Auth;
import com.pn.entity.Role;
import com.pn.entity.UserRole;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface RoleMapper {


    //查询所有角色
    @Select("select * from role where role_state = 1")
    List<Role> roleList();


    //查询用户已分配的角色
    List<Role> userRoleList(Integer userId);

    //根据角色名字查询角色id
    Integer findRoleIdByName(String roleName);

    //根据用户id删除用户已经分配的角色关系表
    @Delete("delete from user_role where user_id = #{userId}")
    int removeUserRoleByUid(Integer userId);

    //添加用户角色关系表
    void insertUserRole(UserRole userRole);

    //根据用户id删除用户角色关系表中的信息
    void romeveUserRoleByUid(List<Integer> userIds);

    //角色列表
    Page<Role> rolePageList(RolePageList rolePageList);

    //根据角色名字查看角色存不存在
    @Select("select * from role where role_name = #{param1} or role_code = #{param2}")
    List<Role> roleByRoleName(String roleName,String roleCode);

    //添加角色
    int roleAdd(Role role);

    //启用禁用角色成功
    @Update("update role set role_state = #{roleState} where role_id = #{roleId}")
    int roleStateUpdateByRid(Role role);

    //根据角色id删除角色
    @Delete("delete from role where role_id = #{roleId}")
    void roleDeleteByRid(Integer roleId);

    //根据角色id删除角色权限的关联表
    @Delete("delete from role_auth where role_id =#{roleId}")
    void roleAuthDeleteByRid(Integer roleId);

    //获取权限列表
    @Select("select * from auth_info where auth_state = 1 and auth_type != 3")
    List<Auth> roleAuthTree();

    //根据角色id查询分配的所有权限菜单的方法
    @Select("select auth_id from role_auth where role_id = #{roleId}")
    List<Integer> findAuthByRid(Integer roleId);


    //给角色添加权限
    @Insert("insert into role_auth(role_id,auth_id)  values(#{param1},#{param2}) ")
    void grantAuthAdd(Integer roleId, Integer authId);

    //修改角色
    @Update("update role from role_desc = #{roleDesc}, update_by = #{updateBy}, update_time = #{updateTime} where role_id = #{roleId}")
    int setDescByRid(Role role);
}
